#include <imprimir.h>

IMPRIMIR::IMPRIMIR(int tipo) : APDF("relatorio.pdf",1) 
	{
	string AUX;
	int c;
	conexao = new BANCOSL(DADOS);
	
	tipo_rel = tipo;
	Salto = 5;
	Tam_Texto = 31;
	Tam_Fonte = 10;
	
	AUX.clear();
	switch(tipo_rel)
		{
		case 1:
			{
			break;
			}
		case 2:
			{
			AUX = "Relatório de Noivos.pdf";
			set_arquivo(AUX);
			n_cols = 3;
			c=0;
			colunas = new PDF_COLUNA[n_cols];
			colunas[c].nome = "Nome Noivo";
			colunas[c].inicio = 15;
			colunas[c].fim = colunas[c].inicio+250;
			colunas[c].alinhamento = HPDF_TALIGN_LEFT;
			c++;
			colunas[c].nome = "Código Interno";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			colunas[c].nome = "Código Firebird";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			break;
			}
		case 3:
			{
			AUX = "Relatório de Noivas.pdf";
			set_arquivo(AUX);
			n_cols = 3;
			c=0;
			colunas = new PDF_COLUNA[n_cols];
			colunas[c].nome = "Nome Noiva";
			colunas[c].inicio = 15;
			colunas[c].fim = colunas[c].inicio+250;
			colunas[c].alinhamento = HPDF_TALIGN_LEFT;
			c++;
			colunas[c].nome = "Código Interno";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			colunas[c].nome = "Código Firebird";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			break;
			}
		case 5:
			{
			AUX = "Relatório de Nascimentos.pdf";
			set_arquivo(AUX);
			n_cols = 3;
			c=0;
			colunas = new PDF_COLUNA[n_cols];
			colunas[c].nome = "Nome";
			colunas[c].inicio = 15;
			colunas[c].fim = colunas[c].inicio+250;
			colunas[c].alinhamento = HPDF_TALIGN_LEFT;
			c++;
			colunas[c].nome = "Código Interno";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			colunas[c].nome = "Código Firebird";
			colunas[c].inicio = colunas[c-1].fim;
			colunas[c].fim = colunas[c].inicio+70;
			colunas[c].alinhamento = HPDF_TALIGN_CENTER;
			c++;
			break;
			}
		}
	set_texto();
	}

IMPRIMIR::~IMPRIMIR()
	{
	delete conexao;
	}

void IMPRIMIR::set_texto()
	{
	vector<vector<string> > dd;
	vector<vector<string> >::iterator id;
	vector<string> linha;
	string SQL, SQL_S, TEXTO_CB, info;
	char *sql, *aux;
	int i, j, jc, col_texto, x;

	TEXTO_CB.clear();
	SQL.clear();
	SQL_S.clear();
	ajuste = 0;
	switch(tipo_rel)
		{
		case 2:
			{
			TEXTO_CB = "Relatório de Noivos importados o sistema";
			SQL = "select NOMHOM, id, cod_firebird from noivos order by NOMHOM";
			SQL_S = "select count(id) from noivos where cod_firebird not null";
			break;
			}
		case 3:
			{
			TEXTO_CB = "Relatório de Noivas importados o sistema";
			SQL = "select NOMMUL, id, cod_firebird from noivas order by NOMMUL";
			SQL_S = "select count(id) from noivas where cod_firebird not null";
			break;
			}
		}
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	conexao->executar(sql,2);
//	cout << sql << endl;
	delete sql;
	if (conexao->query_result != 3)
		{
		total_reg = conexao->registros;
//		cout << total_reg << endl;
		if (total_reg > 0)
			{
			//conexao->resultado();
			set_cabecalho(TEXTO_CB);
			linhas = (Pos_Texto - (2*(Tam_Fonte+Salto)))/(Tam_Fonte+Salto);
			pags = ((total_reg+ajuste)/linhas)+1;
			pag = 1;
//			cout << linhas << " - " << pags << endl;
			dd.clear();
			dd = conexao->resultados;
			for (i=0,x=0; i < total_reg; i++,x++)
				{
				linha = dd.at(i);
				if (x > (linhas-1))
					{
					set_rodape ();
					set_cabecalho (TEXTO_CB);
					x=0;
					pag++;
					}
				for (j=0; j < n_cols; j++)
					{
					info.clear();
					info = Glib::convert(linha.at(j), "UTF-8", "ISO-8859-1");
					aux = new char[info.length()+1];
					strcpy(aux,info.c_str());
//					cout << aux << endl;
					HPDF_Page_BeginText (Pagina);
					HPDF_Page_TextRect (Pagina, colunas[j].inicio, Pos_Texto, colunas[j].fim, (Tam_Fonte+Salto), converter(aux,1), colunas[j].alinhamento, NULL);
					HPDF_Page_EndText (Pagina);
					delete aux;
					}
				Pos_Texto -= (Tam_Fonte+Salto);
				if (x > (linhas-1))
					{
					set_rodape ();
					set_cabecalho (TEXTO_CB);
					x=0;
					pag++;
					}
				}
			}
		}
	else
		{
		cout << conexao->mensagem << endl;
		}
	if (x > (linhas-1))
		{
		set_rodape ();
		set_cabecalho (TEXTO_CB);
		x=0;
		pag++;
		}
	HPDF_Page_MoveTo (Pagina, M_ini, Pos_Texto);
  	HPDF_Page_LineTo (Pagina, M_fim, Pos_Texto);
  	HPDF_Page_Stroke (Pagina);
	sql = new char[SQL_S.length()+1];
	strcpy(sql,SQL_S.c_str());
	conexao->executar(sql,2);
//	cout << sql << endl;
	delete sql;
	if (conexao->query_result != 3)
		{
//		cout << conexao->registros << endl;
		if (conexao->registros > 0)
			{
			//conexao->resultado();
			linha = conexao->resultados.at(0);
			sql = new char[32];
			sprintf (sql,"%d", total_reg);
			info.clear();
			info = "Total de Registros: ";
			info.append(sql);
			delete sql;
			info += " - Total de Inseridos: "+linha.at(0);
			Font_Definida = HPDF_GetFont (PDF_doc, "Helvetica-Bold", "WinAnsiEncoding");
			HPDF_Page_SetFontAndSize (Pagina, Font_Definida, Tam_Fonte);
			aux = new char[info.length()+1];
			strcpy(aux,info.c_str());
			HPDF_Page_BeginText (Pagina);
			HPDF_Page_TextRect (Pagina, colunas[0].inicio, Pos_Texto, colunas[n_cols-1].fim, (Tam_Fonte+Salto), converter(aux,1), colunas[j].alinhamento, NULL);
			HPDF_Page_EndText (Pagina);
			delete aux;
			}
		}
	else
		{
		cout << conexao->mensagem << endl;
		}
	set_rodape();
	}